package com.meicloud.license.appl.service.impl;

import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.Random;

/**
 * 加密工具抽象类
 *
 * @author zhanghui145
 * @date 2022/1/12 9:23
 * @since 1.0.0
 */
public abstract class AbstractEncryptionUtils<T> {

    /**
     * 明文加密
     *
     * @param t         明文信息
     * @param rule 加密规则
     * @return 密文
     */
    abstract String encrypt(T t, String rule);

    /**
     * 密文解密
     * 对称加密：rules需和加密的规则一致
     * 非对称加密：rules需和加密的规则为一对
     *
     * @param decoderCode 密文
     * @param rule       规则
     * @return 明文
     */
    abstract String decrypt(@NotBlank String decoderCode, String rule);

    protected String encryptRule() {
        int bit = new Random().nextInt(3);
        long randNum = (new Date().getTime() >> bit) + (System.nanoTime() >> bit);
        return ("idaas" + randNum + "license").substring(0, 16);
    }
}
